// // Procedimientos de usuario // // NOTA: los procedimientos de este módulo permiten "enganchar" código de usuario // a las respuestas y al bucle principal del juego. // Los procedimientos de este módulo son los únicos que deberían // modificarse. // // v2.01 (03.04.2000) // // ******************************************************** // Los siguientes procedimientos (USR_...) son enganches desde el módulo 'Librería'. // Estos procedimientos se llaman cuando el jugador teclea alguna de las acciones // asociadas y antes de que la librería los procese con lo que se puede // colocar código que responda a casos especiales. // // Algunos reciben parámetros que pueden usarse para determinar su comportamiento. // // En todos ellos se debe devolver un valor para indicar si se ha respondido // o no a la acción. // ******************************************************** // -------------------------------------------------------- // aquí podemos añadir información a la línea de estado // para ello sólo tenemos que imprimirla con Print ya que // al entrar a este procedimiento ya estará seleccionada // la línea de estado y el cursor posicionado justo detrás // de la descripción corta de la localidad // si se quiere posicionar con exactitud el texto a imprimir // se usará ScreenAt(pant_info,x,y) donde 'x' e 'y' marcan // la posición dentro de la línea de estado // -------------------------------------------------------- Sub USR_LineaEstado() ScreenAt(pant_info,500,0) Print("Turnos: " + turnos) Return // -------------------------------------------------------- // a este procedimiento se le llama antes de mover al jugador // recibe: // 'dir' verbo de movimiento que indica la dirección hacia // donde quiere moverse el jugador // debe devolver TRUE si el jugador se mueve o FALSE si se queda donde está // -------------------------------------------------------- Sub USR_MueveJugador(dir) Declare(ret) ret:=TRUE If (PSI[PSIJugador].Localidad="HABITACION") & (dir="SALIR") Then Epilogo3() ret:=FALSE EndIf Return ret // -------------------------------------------------------- // EXAMINAR // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Examinar() Declare(ret) ret:=FALSE If PSI[PSIJugador].Localidad="HABITACION" Then If ParsePreposicion="DEBAJO" Then Select ParseNombre1 Case "CAMA" If Not(jsj) Then Print("Al mirar bajo la cama otros ojos te devuelven la mirada. Ves a un extraño individuo tendido en el suelo") Print(" que sujeta unos papeles, y una extraña pluma de escribir metálica, con una incripción minúscula pero que puedes llegar a leer, a pesar de la poca luz: \"JSJ\"." + CR) HablaPSI("Seguid, seguid con lo vuestro, por favor. Yo sólo estaba tomando notas pero ya me iba.","dice el extraño individuo con una sonrisa de oreja a oreja.") Print("Parpadeas y, como por arte de magia, el individuo de debajo de la cama ha desaparecido. Parece que tus sentidos te han jugado una mala pasada. ¿O no?." + CR) jsj:=TRUE Else Print("Está muy oscuro debajo de la cama pero no parece que haya nada de interés") Print(" a excepción de unas marcas grabadas en el suelo de madera que dicen algo como: \"JSJ EZTUBO AKIN\"" + CR) EndIf ret:=TRUE EndSelect Else Select ParseNombre1 Case "PARED" Print("Las paredes son de madera cubierta por un curioso barniz que desprende un ténue olor a rosas.") Print(" Ya habías oido hablar a otros aventureros de este tipo de lujos, presentes en ciertos locales destinados al placer en todas sus formas." + CR) ret:=TRUE Case "COLCHON" Print("Es el colchón más grande que has visto, dirías que caben perfectamente tres o incluso cuatro personas sobre él." + CR) ret:=TRUE Case "COJINES" Print("Son unos grandes cojines de piel suave, posiblemente de un exótico animal que no eres capaz de distinguir." + CR) ret:=TRUE Case "VENTANA" Print("A través de las vaporosa cortinas observas el ambiente nocturno de la ciudad.") Print(" Varios borrachos y prostitutas pasean alegremente bajo la ventana." + CR) ret:=TRUE Case * If PSI["XZIRA"].Localidad=PSI[PSIJugador].Localidad Then ret:=XZIRA_Examinar() EndIf EndSelect EndIf EndIf Return ret // -------------------------------------------------------- // EXAMINAR DETALLES // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver el texto sobre los detalles adicionales del // PSI o el objeto que se imprimirán al examinarlo // -------------------------------------------------------- Sub USR_ExaminarDetalles(psi,nombre) Declare(txt) txt:="" If psi Then If nombre="XZIRA" Then If PSI[nombre].Vestido Then txt:="Lleva un minúsculo vestido de cuero que deja al descubierto su torso y sus bronceadas piernas." Else txt:="Su cuerpo desnudo reluce contra la ténue luz de la luna que llega a entrar por la ventana." txt:=txt + " Un profundo valle de placer inicia su recorrido entre sus proporcionados senos para terminar surcando" txt:=txt + " las blancas llanuras de su vientre y desembocar en el vello púbico." EndIf If PSI[nombre].Tumbado Then txt:=txt + " Está tumbada sobre la cama." EndIf EndIf Else If nombre="VASO" Then If OBJ[nombre].Lleno<>"" Then txt:=" Está lleno de " + OBJ[nombre].Lleno + "." EndIf EndIf EndIf // añadimos un espacio adicional a los detalles If txt<>"" Then txt:=" " + txt EndIf Return txt // -------------------------------------------------------- // COGER // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Coger(psi,nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // DEJAR // recibe: // 'nombre' nombre del objeto al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Dejar(nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // METER // recibe: // 'nombre' nombre del objeto al que nos referimos // 'nombre_contenedor' nombre del objeto dónde queremos meterlo // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Meter(nombre,nombre_contenedor) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // SACAR // recibe: // 'nombre' nombre del objeto al que nos referimos // 'nombre_contenedor' nombre del objeto dónde queremos meterlo // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Sacar(nombre,nombre_contenedor) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // ABRIR // recibe: // 'nombre' nombre del objeto al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Abrir(nombre) Declare(ret) ret:=FALSE If (PSI[PSIJugador].Localidad="HABITACION") & (nombre="VENTANA") Then HablaPSI("Por favor, no abras la ventana. Hace frío fuera y además... alguien podría molestarnos.","dice Xzira.") Print("Te lo piensas mejor y desistes de tu intento." + CR) ret:=TRUE EndIf Return ret // -------------------------------------------------------- // CERRAR // recibe: // 'nombre' nombre del objeto al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Cerrar(nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // PONER // recibe: // 'nombre' nombre del objeto al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Poner(nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // QUITAR // recibe: // 'nombre' nombre del objeto al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Quitar(nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // ENCENDER // recibe: // 'nombre' nombre del objeto/PSI sobre el que se actúa // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Encender(nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // APAGAR // recibe: // 'nombre' nombre del objeto/PSI sobre el que se actúa // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Apagar(nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // SABOREAR // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Saborear(psi,nombre) Declare(ret) ret:=FALSE If psi Then If nombre="XZIRA" Then If PSI[nombre].Localidad=PSI[PSIJugador].Localidad Then ret:=XZIRA_Saborear() EndIf EndIf EndIf Return ret // -------------------------------------------------------- // OLER // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Oler(psi,nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // ESCUCHAR // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Escuchar(psi,nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // TOCAR // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Tocar(psi,nombre) Declare(ret) ret:=FALSE If psi Then If nombre="XZIRA" Then If PSI[nombre].Localidad=PSI[PSIJugador].Localidad Then ret:=XZIRA_Tocar() EndIf EndIf Else If PSI[PSIJugador].Localidad="HABITACION" Then Select nombre Case "COLCHON" Print("Está bastante mullido. Notas que está relleno de plumas de ave (bueno quizá no sean de ave pero que más da)." + CR) ret:=TRUE Case "PAREDES" Print("Dirías que son de madera de roble. Muy sólidas y gruesas." + CR) ret:=TRUE Case "CORTINA" Print("El tejido es muy suave al tacto y tan vaporoso que se desliza fácilmente entre tus dedos." + CR) ret:=TRUE EndSelect EndIf EndIf Return ret // -------------------------------------------------------- // LANZAR // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Lanzar() Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // GOLPEAR // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Golpear(psi,nombre) Declare(ret) ret:=FALSE If psi Then If nombre="XZIRA" Then Epilogo2() EndIf Else Select nombre Case "VASO" If EstaPresenteObj(nombre) Then Print("Golpeas fuertemente el vaso y se hace añicos." + CR) OBJ[nombre].Contenedor:="" ret:=TRUE EndIf Case "BOTELLA" If EstaPresenteObj(nombre) Then Print("La botella se rompe derramando su contenido sobre el suelo. Curiosamente el líquido se evapora a los pocos segundos." + CR) OBJ[nombre].Contenedor:="" ret:=TRUE EndIf EndSelect EndIf Return ret // -------------------------------------------------------- // CORTAR // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Cortar(psi,nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // ATAR // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Atar(psi,nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // DESATAR // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Desatar(psi,nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // MOVER // recibe: // 'psi' TRUE si nos referimos a un PSI o FALSE a un objeto // 'nombre' nombre del objeto o PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Mover(psi,nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // MATAR // recibe: // 'nombre' nombre del PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Matar(nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // BEBER // recibe: // 'nombre' nombre del objeto al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Beber(nombre) Declare(ret) ret:=FALSE If nombre="VASO" Then If PSI[PSIJugador].Contiene(nombre) Then If OBJ[nombre].Lleno="" Then Print("Lástima que el vaso esté vacío." + CR) ret:=TRUE Else Print("Te bebes todo el " + OBJ[nombre].Lleno + " del vaso de un solo trago." + CR) OBJ[nombre].Lleno:="" PSI[PSIJugador].Bebido:=PSI[PSIJugador].Bebido+1 // si bebe mucho, el jugador terminará emborrachándose If PSI[PSIJugador].Bebido>2 Then If PSI[PSIJugador].Bebido>5 Then Epilogo4() Else Select PSI[PSIJugador].Bebido Case 3 Print("Un reconfortante calor embriaga todo tu cuerpo." + CR) Case 4 Print("Este licor te sabe mejor a cada trago, es realmente bueno. Quizá deberías beber un poco más." + CR) Case 5 Print("Después de este último trago los objetos de la habitación parecen un poco más borrosos. ¿Quién habrá puesto dos camas ahí?" + CR) EndSelect EndIf Endif ret:=TRUE EndIf Else Print("No llevas el vaso." + CR) ret:=TRUE EndIf EndIf Return ret // -------------------------------------------------------- // COMER // recibe: // 'nombre' nombre del objeto al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Comer(nombre) Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // SALTAR // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Saltar() Declare(ret) ret:=FALSE DisminuyeLibidoPSI("XZIRA",5) Return ret // -------------------------------------------------------- // GRITAR // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Gritar() Declare(ret) ret:=FALSE HablaPSI("¡Qué te pasa!, ¿te duele algo?.","Xzira se muestra sorprendida por tu reacción.") DisminuyeLibidoPSI("XZIRA",5) Return ret // -------------------------------------------------------- // CANTAR // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Cantar() Declare(ret) ret:=FALSE DisminuyeLibidoPSI("XZIRA",5) Return ret // -------------------------------------------------------- // BESAR // recibe: // 'psi' nombre del PSI al que nos referimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Besar(psi) Declare(ret) ret:=FALSE If psi="XZIRA" Then XZIRA_Besar() ret:=TRUE EndIf Return ret // -------------------------------------------------------- // DORMIR // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Dormir() Declare(ret) ret:=FALSE Return ret // -------------------------------------------------------- // DECIR // recibe: // 'nombre' nombre del PSI al que nos referimos // 'frase' frase que le decimos // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Decir(nombre,frase) Declare(ret) ret:=FALSE Select nombre Case "XZIRA" ret:=XZIRA_Hablar(frase) EndSelect Return ret // -------------------------------------------------------- // DAR // recibe: // 'objeto' nombre del objeto que queremos dar // 'psi' nombre del PSI a quien le queremos dar el objeto // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Dar(objeto,psi) Declare(ret) ret:=FALSE If psi="XZIRA" Then If objeto="VASO" Then XZIRA_DarVaso() ret:=TRUE EndIf EndIf Return ret // -------------------------------------------------------- // acciones anteriores a que se procese el comando del jugador // aquí se llega después de analizar el comando pero antes // de que se ejecute la acción asociada (si hubiese alguna) // -------------------------------------------------------- Sub USR_Ant() // QUITAR ROPA A XZIRA // ---> DESNUDAR A XZIRA If (ParseVerbo="QUITAR") & (ParseNombre1="ROPA") & (ParseNombre2="XZIRA") Then ParseVerbo:="DESNUDAR" ParseNombre1:=ParseNombre2 ParseNombre2:="" EndIf // VERTER/VACIAR LICOR EN VASO // VERTER/VACIAR BOTELLA EN VASO // ---> LLENAR VASO If ((ParseVerbo="VERTER") | (ParseVerbo="VACIAR")) & ((ParseNombre1="LICOR") | (ParseNombre1="BOTELLA")) & (ParseNombre2="VASO") Then ParseVerbo:="LLENAR" ParseNombre1:="VASO" ParseNombre2:="" Endif // BEBER LIQUIDO // ---> BEBER VASO If (ParseVerbo="BEBER") & (ParseNombre1="LIQUIDO") Then ParseNombre1:="VASO" EndIf // HACER AMOR A XZIRA // ---> FOLLAR A XZIRA If (ParseVerbo="HACER") & (ParseNombre1="AMOR") & (ParseNombre2="XZIRA") Then ParseVerbo:="FOLLAR" ParseNombre1:="XZIRA" ParseNombre2:="" EndIf // METER PENE A XZIRA // ---> FOLLAR A XZIRA If (ParseVerbo="METER") & (ParseNombre1="PENE") & (ParseNombre2="XZIRA") Then ParseVerbo:="FOLLAR" ParseNombre1:="XZIRA" ParseNombre2:="" EndIf // PONER ROPA // ---> VESTIR If (ParseVerbo="PONER") & (ParseNombre1="ROPA") & (ParseNombre2="") Then ParseVerbo:="VESTIR" ParseNombre1:="" EndIf // QUITAR ROPA // ---> DESNUDAR If (ParseVerbo="QUITAR") & (ParseNombre1="ROPA") & (ParseNombre2="") Then ParseVerbo:="DESNUDAR" ParseNombre1:="" EndIf // TOCAR PENE // ---> MASTURBAR If (ParseVerbo="TOCAR") & (ParseNombre1="PENE") Then ParseVerbo:="MASTURBAR" ParseNombre1:="" ParseNombre2:="" EndIf // TOCAR xxx XZIRA // ---> TOCAR XZIRA xxx If (ParseVerbo="TOCAR") & (ParseNombre2="XZIRA") Then ParseNombre2:=ParseNombre1 ParseNombre1:="XZIRA" EndIf // BESAR xxx XZIRA // ---> SABOREAR/CHUPAR XZIRA xxx If (ParseVerbo="BESAR") & (ParseNombre2="XZIRA") Then ParseVerbo:="SABOREAR" ParseNombre2:=ParseNombre1 ParseNombre1:="XZIRA" EndIf // BESAR XZIRA xxx // ---> SABOREAR/CHUPAR XZIRA xxx If (ParseVerbo="BESAR") & (ParseNombre1="XZIRA") & (ParseNombre2<>"") Then ParseVerbo:="SABOREAR" EndIf // SABOREAR/CHUPAR xxx XZIRA // ---> SABOREAR/CHUPAR XZIRA xxx If (ParseVerbo="SABOREAR") & (ParseNombre2="XZIRA") Then ParseNombre2:=ParseNombre1 ParseNombre1:="XZIRA" EndIf // TOCAR xxx (xxx=parte cuerpo de Xzira) // ---> TOCAR XZIRA xxx If (ParseVerbo="TOCAR") & XZIRA_ParteCuerpo(ParseNombre1) Then ParseNombre2:=ParseNombre1 ParseNombre1:="XZIRA" EndIf // SABOREAR/CHUPAR xxx (xxx=parte cuerpo de Xzira) // ---> SABOREAR/CHUPAR XZIRA xxx If (ParseVerbo="SABOREAR") & XZIRA_ParteCuerpo(ParseNombre1) Then ParseNombre2:=ParseNombre1 ParseNombre1:="XZIRA" EndIf Return // -------------------------------------------------------- // acciones posteriores a que se procese el comando del jugador // -------------------------------------------------------- Sub USR_Post() // comprobamos si el jugador está vestido If PSI[PSIJugador].Contiene("TAPARRABOS") & OBJ["TAPARRABOS"].Puesto Then PSI[PSIJugador].Vestido:=TRUE Else PSI[PSIJugador].Vestido:=FALSE EndIf XZIRA_Mueve() Return // -------------------------------------------------------- // respuestas a otras acciones no contempladas en la librería estándar // debe devolver TRUE si se dió una respuesta a al acción o FALSE si no // -------------------------------------------------------- Sub USR_Respuesta() Declare(ret) Declare(obj) ret:=FALSE Select ParseVerbo Case "XYZZY" If (OBJ["BOTELLA"].Contenedor="") | (OBJ["VASO"].Contenedor="") Then Print("Un sonido cómo de campanillas inunda la habitación y entre una nube de humo aparece algo en el suelo." + CR) OBJ["BOTELLA"].TipoContenedor:=0 OBJ["BOTELLA"].Contenedor:="HABITACION" OBJ["VASO"].TipoContenedor:=0 OBJ["VASO"].Contenedor:="HABITACION" EndIf Print("Una voz susurra dentro de tu cabeza... \[C]mira debajo de la cama\[C]." + CR) ret:=TRUE Case "LIBIDO" Print("Líbido de jugador: " + PSI[PSIJugador].Libido + CR) Print("Líbido de Xzira: " + PSI["XZIRA"].Libido + CR) turnos:=turnos-1 ret:=TRUE Case "DESNUDAR" If ParseNombre1="XZIRA" Then XZIRA_Desnudar(1) Else If ParseNombre1="" Then If PSI[PSIJugador].Vestido Then Print("Te quitas el taparrabos y lo arrojas al suelo." + CR) If (PSI["XZIRA"].Libido>=30) & PSI["XZIRA"].Vestido Then XZIRA_Desnudar(0) Else HablaPSI("Vaya, estás muy juguetón...","") AumentaLibidoPSI("XZIRA",0,50,10) Print("Xzira acaricia tu pecho y desliza su mano hacia abajo, muy lentamente..." + CR) EndIf OBJ["TAPARRABOS"].Puesto:=FALSE OBJ["TAPARRABOS"].Dejar("HABITACION") AumentaLibidoPSI(PSIJugador,0,50,20) Else Print("Estás desnudo ya." + CR) EndIf Else Print("¿A quién?" + CR) EndIf EndIf ret:=TRUE Case "VESTIR" If ParseNombre1="XZIRA" Then If PSI["XZIRA"].Vestido Then Print("¿Acaso no está ya vestida?" + CR) Else Print("No logras ver la ropa de Xzira por ningún lado. Seguramente esté tirada en un oscuro rincón de la habitación.") Print(" De todas formas, no parece que la semielfa se sienta incómoda desnuda." + CR) EndIf Else If PSI[PSIJugador].Vestido Then Print("Ya estás vestido." + CR) Else PSI[PSIJugador].Coger("TAPARRABOS") OBJ["TAPARRABOS"].Puesto:=TRUE Print("Te pones el taparrabos." + CR) Endif EndIf ret:=TRUE Case "FOLLAR" If ParseNombre1="" Then Print("¿A quién?" + CR) Else If ParseNombre1="XZIRA" Then XZIRA_Follar() EndIf EndIf ret:=TRUE Case "LLENAR" obj:=NombreCompleto(ParseNombre1,ParseAdjetivo1) If obj="VASO" Then If OBJ[obj].Lleno="" Then If PSI[PSIJugador].Contiene("BOTELLA") Then If OBJ["BOTELLA"].Abierto Then Print("Llenas el vaso con una cantidad generosa de licor de la botella." + CR) OBJ[obj].Lleno:="licor" Else Print("La botella está cerrada." + CR) EndIf Else Print("No tienes nada conque llenar el vaso." + CR) EndIf Else Print("El vaso ya está lleno de " + OBJ["VASO"].Lleno + "." + CR) EndIf Else If obj="" Then Print("¿Qué quieres llenar?" + CR) Else Print("No puedes llenar eso." + CR) EndIf EndIf ret:=TRUE Case "MASTURBAR" If ParseNombre1="" Then If PSI[PSIJugador].Vestido Then Print("Aproximas tu mano a la entrepierna y la introduces entre el taparrabos. Imprimes a tu") Print(" miembro un ligero vaivén que aumentas de ritmo progresivamente. Tu mano sujeta ahora") Print(" una verga endurecida." + CR) HablaPSI("¡Eh!... tranquilo... deja algo para mí.","Xzira te observa divertida") AumentaLibidoPSI(PSIJugador,0,100,5) Else Print("Sin ningún pudor coges tu miembro viril con una de tus fuertes manos y comienzas") Print(" a frotártelo con un movimiento de vaivén muy lento primero y más rápido después.") Print(" Xzira te observa divertida mientras tu verga comienza a endurecerse." + CR) HablaPSI("Deja un poco para mí hombretón","la semielfa pronuncia la frase entre susurros") AumentaLibidoPSI(PSIJugador,0,100,5) EndIf If PSI[PSIJugador].Libido>90 Then Print("Tu verga estalla en una cascada de semen que se esparce por el suelo. Sigues sujetándote el miembro") Print(" hasta que deja de gotear." + CR) Epilogo5() Else If PSI[PSIJugador].Libido>80 Then Print("Una oleada de calor sacude tus testículos y se desliza hacia la punta de tu endurecido miembro." + CR) EndIf EndIf Else If ParseNombre1="XZIRA" Then XZIRA_Masturbar() Else Print("¿A quién?" + CR) EndIf EndIf ret:=TRUE Case "TUMBAR" If ParseNombre1="CAMA" Then If PSI[PSIJugador].Tumbado Then Print("Ya estás tumbado en la cama." + CR) Else Print("Te tumbas en la cama." + CR) PSI[PSIJugador].Tumbado:=TRUE XZIRA_Tumbar() EndIf Else If ParseNombre1="" Then If PSI[PSIJugador].Tumbado Then Print("Ya estás tumbado en la cama." + CR) Else Print("¿Dónde quieres tumbarte?." + CR) EndIf Else Print("No puedes tumbarte ahí." + CR) EndIf EndIf ret:=TRUE Case "LEVANTAR" If PSI[PSIJugador].Tumbado Then Print("Te levantas." + CR) PSI[PSIJugador].Tumbado:=FALSE If PSI["XZIRA"].Tumbado Then HablaPSI("Uhmmm... no te vayas... ven conmigo...","Xzira se estira y contonea sobre la cama.") EndIf Else Print("Ya estás de pie." + CR) EndIf ret:=TRUE EndSelect Return ret // -------------------------------------------------------- // mensajes de copyright // -------------------------------------------------------- Sub USR_Copyright() Declare(spc) Declare(copyright) Declare(email) Declare(web) Declare(descripcion) // personalizamos distribución de pantalla ScreenPos(pant_grf,0,tamy_info) ScreenSize(pant_grf,320,tamy-tamy_info-ajustey) ScreenPos(0,320,tamy_info) ScreenSize(0,tamx-ajustex-320,tamy-tamy_info-ajustey) // dibujo de presentación ScreenImg(pant_grf,"#1") spc:=" " copyright:="(c)2000 Login:" email:="jsj666@hotmail.com" web:="http://pagina.de/jsj" descripcion:="Una 'mini-aventura' de temática fantástico-erótica." Print(CR + " \[Times New Roman]\[12]\[RGB(FFFFCC)]\[N]" + titulo + "\[N]" + CR) Print("\[10]\[C]" + spc + copyright + "\[C]" + CR) Print(spc + "\[RGB(8080FF)]\[S]" + web + "\[S] " + email) Print(CR + spc + "\[RGB(FFCCCC)]" + descripcion) Print(CR + spc + "Versión " + version + " / intérprete " + VerVS) // inicializamos el tipo de letra y color del texto Print(tipo_letra + color_letra + CR + CR) Return // -------------------------------------------------------- // introducción // -------------------------------------------------------- Sub USR_Inicio() Declare(opc) opc:=Input("¿Quieres leer la nota del autor? ") If UCase(Left(opc,1))="S" Then Print(CR + "\[12]\[N]NOTA DEL AUTOR:\[N]" + tipo_letra + CR + CR) Print("\[C]") Print("A continuación vas a experimentar una aventura atípica. No se trata de resolver") Print(" complejos puzzles ni de recorrer complicados laberintos. Más bien se trata de") Print(" algo diferente, de un juego, el juego del amor. No el amor platónico, ni el amor") Print(" puro de los eternos enamorados. Se trata del amor pasional. De la pasión desatada.") Print(" Del deseo. El escenario no puede ser más básico. Hombre y mujer unidos por un ardiente") Print(" deseo que les consume. Deberás participar en este juego como mejor te parezca.") Print(" Tu pareja colaborará en todo lo posible." + CR + CR) Print("Por supuesto el objetivo de este peculiar juego de pasión es llegar al éxtasis total, creo que") Print(" no es necesario explicar más. Realmente no es necesario que tú llegues al éxtasis, (aunque si") Print(" esta aventura consigue provocar tal reacción me daré por más que satisfecho) pero sí tu pareja." + CR + CR) Print("\[N]Ahora viene el aviso necesario\[N]: esta aventura contiene textos y descripciones para adultos.") Print(" En todo momento he intentado mantener un tono que no llegue a la obscenidad pero quizá") Print(" sí que la roce en ciertos pasajes. Bueno, no voy a decir que esta aventura es para mayores") Print(" de edad pero sí recomendaría jugarla con una mentalidad abierta y desinhibida." + CR + CR) Print("Esta aventura además está orientada a un público claramente masculino. Me consta que el número") Print(" de jugadoras es lo suficientemente excaso (¿inexistente?) como para no haber realizado la versión") Print(" femenina de la historia (aunque ganas no me han faltado)." + CR + CR) Print(CR + CR + " JSJ." + CR + CR) Print("\[C]") PulsaTecla() ScreenCls(0) EndIf Print(CR + "\[12]\[N]PROLOGO:\[N]" + tipo_letra + CR + CR) Print("Tus correrías por las tierras del sur te habían llevado a aquella ciudad. No era") Print(" la más grande urbe de la zona pero al menos disponía de las comodidades y") Print(" placeres que las pequeñas aldeas no podían darte." + CR + CR) Print("Como todos los hombres del norte atraías las miradas tanto de hombres, celosos y") Print(" temerosos de tu magnífica complexión y de tu impresionante estatura, como de") Print(" mujeres en cuyos ojos adivinabas oscuros deseos." + CR + CR) Print("Llevabas una vida de riesgos y aventuras. Tú, un guerrero desde que viste la luz") Print(" en este hostil mundo de peligros. Ya habías frecuentado varios grupos de") Print(" aventureros en las más osadas expediciones en búsqueda de riquezas. Tu espada") Print(" siempre había sido una valiosa aliada que te había sacado de más de un apuro." + CR + CR) Print("El grupo de aventureros que esa noche pernoctaba en la taberna \[N]\"Fuego de") Print(" Dragón\"\[N] parecía muy preocupado. Apenas hablaban entre ellos y menos con los") Print(" parroquianos. Había un clérigo, claramente reconocible por sus símbolos") Print(" religiosos, un par de guerreros que bebían sin parar, jarra tras jarra de un") Print(" espumoso líquido, y tres magos. ¡Dios!, sabrías distinguir un mago a kilómetros") Print(" de distancia. Todos llevaban mutitud de anillos, medallones, y solían cargar con") Print(" sus preciados libros. Y eso era sólo parte de lo que llevaban a la vista." + CR + CR) Print("El grupo de magos estaba separado del resto, en un rincón, claramente") Print(" concentrados sobre una pila de libros y pergaminos abiertos. No hablaban pero") Print(" una lenta y melódica letanía procedía de sus bocas entrecerradas. Mientras les") Print(" contemplabas ella te miró. Era una semielfa. Al menos eso parecía ya que sus") Print(" orejas puntiagudas asomaban entre su largo y sedoso pelo castaño. Cuando se") Print(" levantó, dejando a sus compañeros magos ensimismados sobre sus libros, y pasó a") Print(" tu lado oliste un suave perfume que parecía envolverla como una nube invisible.") Print(" Apenas iba vestida. Tu mirada no podía apartarse de la tersa piel de su torso,") Print(" de las proporcionadas curvas de sus caderas, de sus voluptuosos pechos apenas") Print(" contenidos por una prenda de cuero." + CR + CR) Print("Ella también se fijó en tí. ¿Qué mujer no se fijaría en un bárbaro medio desnudo") Print(" cuyo cuerpo cubierto de proporcionados músculos prometía las más calurosas y") Print(" húmedas pasiones?." + CR) HablaPSI("Sígueme.","") Print("Una voz melódica, suave, dulce acarició durante unos segundos tus") Print(" oidos. Creíste que fue tu imaginación que te jugaba una mala pasada pero al") Print(" volver la vista ahí estaba la semielfa, sus carnosos labios junto a tu oreja." + CR) HablaPSI("Ven, creo que tengo algo que deseas.","") Print("Volvió a repetir. Cada palabra te laceró en lo más profundo como ningún arma") Print(" había hecho hasta ahora. Te limitaste a sonreir y a seguir a la mujer") Print(" a través de la taberna, repleta de sudorosos cuerpos, hacia el piso superior." + CR + CR) Print("Antes de que se cerrase la puerta de la habitación diste un último vistazo a") Print(" la chimenea que ardía en el piso de abajo. Ahora empezabas a comprender el") Print(" porqué del nombre de la taberna, \[N]\"Fuego de Dragón\"\[N], era muy apropiado y no") Print(" sólo por el fuego que calentaba el local sino por el fuego que ardía ahora en tu") Print(" interior." + CR + CR) PulsaTecla() // restauramos configuración de pantalla DestroyScreen(pant_grf) hay_graficos:=FALSE ScreenPos(0,0,tamy_info) ScreenSize(0,tamx-ajustex,tamy-tamy_info-ajustey) ScreenCls(0) Print("\[RGB(E0E000)]\[Times New Roman]\[C](Teclea \[N]AYUDA\[N] para obtener información adicional)\[C]" + tipo_letra + color_letra + CR + CR) Return // -------------------------------------------------------- // música de fondo // -------------------------------------------------------- Sub USR_MusicaFondo() If hay_sonido Then musica_fondo:=LoadSong("#9999") PlaySong(musica_fondo) EndIf Return // -------------------------------------------------------- // pantalla de ayuda // -------------------------------------------------------- Sub USR_Ayuda() Print(CR + "\[RGB(E0E000)]\[Times New Roman]En esta aventura tienes disponibles los verbos de acción comunes a casi todas") Print(" las aventuras (entre paréntesis se indica la forma abreviada):" + CR + CR) Print("\[N]COGER, DEJAR, MIRAR (M), EXAMINAR (EX), INVENTARIO (I), METER, SACAR, ABRIR, CERRAR, PONER, QUITAR, ENCENDER, APAGAR, ") Print("GOLPEAR, MATAR, ATAR, DESATAR, CORTAR, MOVER, OLER, SABOREAR, TOCAR, ESCUCHAR, LANZAR, BEBER, COMER, ") Print("SALTAR, GRITAR, CANTAR, BESAR, DORMIR, DAR") Print(CR + CR + "\[N]") Print("Se pueden teclear acciones múltiples en una sola línea sin más que encadenarlas con comas (,) o con \[N]Y\[N].") Print(" Además se pueden usar pronombres para referirse al último objeto referenciado dentro de una acción, por ejemplo:" + CR + CR) Print("\[N]COGER EL LIBRO, LEERLO Y DEJARLO\[N]" + CR + CR) Print("Además puedes hablar con los personajes usando la forma:" + CR + CR) Print("\[N]DECIR A PERSONAJE \"FRASE\"\[N]" + CR + CR) Print("se puede usar la forma abreviada si hay un sólo personaje en la localidad:" + CR + CR) Print("\[N]DECIR \"FRASE\"\[N]" + CR + CR) Print("En cualquier momento puedes hacer que la acción transcurra sin que tú hagas nada usando el verbo \[N]ESPERAR (Z)\[N]" + CR + CR) Print("Además puedes guardar y recuperar el estado del juego con los comandos \[N]GUARDAR\[N] y \[N]CARGAR\[N]" + CR + CR) Print("Para salir del juego debes teclear \[N]FIN\[N] o \[N]ABANDONAR\[N], pero acuérdate de guardar la partida si quieres continuarla más adelante" + CR + CR) Print("\[N]TURNOS\[N] te mostrará cuantos turnos llevas jugados." + CR + CR) Print("\[N]LIBIDO\[N] muestra cómo va progresando el 'juego' ;-)." + CR + CR) Print(tipo_letra + color_letra) PulsaTecla() Return // -------------------------------------------------------- // ESPERAR // debe devolver TRUE si dió respuesta a la acción, FALSE si no // -------------------------------------------------------- Sub USR_Esperar() Declare(ret) ret:=FALSE //DisminuyeLibidoPSI("XZIRA",5) Return ret